package com.hopu.computer.annotation;

import com.hopu.computer.Computer;

import java.lang.reflect.Field;

/**
 * 工厂模式，用于生产电脑对象
 */
public class ComputerFactory {

    /**
     * 创建电脑对象
     * @param computerClass 电脑类型
     * @return 电脑产品
     */
    public Computer create(Class computerClass) throws IllegalAccessException, InstantiationException {
        //创建电脑对象
        Object obj = computerClass.newInstance();
        //获得所有的属性
        Field[] fields = computerClass.getDeclaredFields();
        for(Field field : fields) {
            field.setAccessible(true);
            //判断属性上是否存在自定义注解
            MyValue myValue = field.getDeclaredAnnotation(MyValue.class);
            if(myValue != null) {
                //判断是MyValue读取字符串值，给属性赋值
                field.set(obj,myValue.value());
            }
            //判断是MyComponent读取类型，创建类型的对象，给属性赋值
            MyComponent myComponent = field.getDeclaredAnnotation(MyComponent.class);
            if(myComponent != null){
                field.set(obj,myComponent.value().newInstance());
            }
        }
        //返回电脑对象
        return (Computer) obj;
    }
}
